package com.dmp.storm.bolt.mdrill;//package com.dmp.storm.bolt.mdrill;
//
//import java.io.IOException;
//import java.util.ArrayList;
//import java.util.List;
//import java.util.Map;
//import java.util.Properties;
//import java.util.UUID;
//import java.util.concurrent.Executors;
//import java.util.concurrent.ScheduledExecutorService;
//import java.util.concurrent.ScheduledFuture;
//import java.util.concurrent.TimeUnit;
//
//import org.apache.commons.collections.CollectionUtils;
//import org.apache.http.client.utils.CloneUtils;
//import org.apache.solr.client.solrj.SolrServerException;
//import org.apache.solr.common.SolrInputDocument;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//
//import com.dmp.common.mdrill.MdrillSolrUtil;
//import com.dmp.storm.bolt.BaseMapBolt;
//
///**
// * @ClassName MdrillBolt
// * @Description 入库mdrill
// *
// * @author  sunzy
// * @date 2016年4月11日 下午7:40:37
// * @version 1.0
// *
// */
//public class MdrillBolt  extends BaseMapBolt {
//	private static final Logger logger = LoggerFactory
//			.getLogger(MdrillBolt.class);
//
//	private static final long serialVersionUID = -5075271821687840515L;
//
//	//参数配置  begin---
//	private  String propPath;
//	private  String zookeeper;
//	private  String tableName ;
//	private  String columnNames ;
//	private  String inFields ;
//
//	private  int timeOut; // 5分钟触发
//	private static  int recordSize;// 3万条触发
//	//参数配置  end----
//
//
//	private  String[] columnList;
//	private  String[] inFieldList;
//	private  Properties props = new Properties();
//
//	private ScheduledExecutorService scheduExec;
//	@SuppressWarnings("rawtypes")
//	public ScheduledFuture future;
//	private volatile boolean flag = false;
//	private int count = 0;// 记录条数数目
//
//
//	private List<SolrInputDocument> dataList ; //数据缓存
//
//	/**
//	  * @author  sunzy
//	  * @date 2016年4月12日 下午2:26:58
//	  * @Description  处理前加载配置
//	  *
//	  *
//	  * @see com.dmp.storm.bolt.BaseMapBolt#prepare()
//	  */
//	@Override
//	public void prepare() {
//
//		try {
//			props.load(MdrillBolt.class.getClassLoader().getResourceAsStream(propPath));
//		} catch (IOException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//		timeOut = Integer.parseInt(props.getProperty("timeOut"));
//		recordSize = Integer.parseInt(props.getProperty("recordSize"));
//		zookeeper = props.getProperty("zookeeper");
//
//		dataList = new ArrayList<SolrInputDocument>();
//		scheduExec = Executors.newSingleThreadScheduledExecutor();
//		future = startTask();
//
//
//		MdrillSolrUtil.setClient(zookeeper,tableName);
//		columnList = columnNames.split(",");
//		inFieldList = inFields.split(",");
//
//		if(columnList.length != inFieldList.length){
//			System.err.println("配置参数不一致：表字段与入表数据字段数量不相等！");
//			System.exit(-1);
//		}
//	}
//
//	/**
//	  * @author  sunzy
//	  * @date 2016年4月12日 下午2:34:24
//	  * @Description  增加表数据到缓存
//	  *
//	  * @param map
//	  * @return
//	  *
//	  * @see com.dmp.storm.bolt.BaseMapBolt#process(java.util.Map)
//	  */
//	@Override
//	public Map<String, Object> process(Map<String, Object> map) {
//		SolrInputDocument doc = new SolrInputDocument();
//
//		int columnLength = columnList.length;
//		for(int i=0 ;i< columnLength;i++) {
//			String column = columnList[i];
//			String inFieldKey= inFieldList[i];
//
//			Object value = map.get(inFieldKey);
//			doc.addField(column, value!=null?(String)value:"");
//		}
//
//		Object value=UUID.randomUUID().getMostSignificantBits();
//		doc.addField("higo_uuid", value );
//
//
//		this.addData(doc);
//
//		return null;
//	}
//
//	/**
//	  * @author  sunzy
//	  * @date 2016年5月18日 下午2:34:03
//	  * @Description 增加数据
//	  *
//	  * @param doc
//	  * @return  void
//	  */
//	private void addData(SolrInputDocument doc) {
//		this.check();
//
//		this.dataList.add(doc);
//
//		//刷新数据
//		this.flash();
//	}
//
//	/**
//	  * @author  sunzy
//	  * @date 2016年5月18日 下午2:33:40
//	  * @Description 避免抢资源
//	  *
//	  * @return  void
//	  */
//	private void check() {
//		while(this.flag){
//			try {
//				Thread.sleep(10);
//			} catch (InterruptedException e) {
//				// TODO Auto-generated catch block
//				e.printStackTrace();
//			}
//		}
//	}
//
//	/**
//	  * @author  sunzy
//	  * @date 2016年4月12日 下午2:27:30
//	  * @Description 超时单线程入库处理
//	  *
//	  * @return
//	  * @return  ScheduledFuture
//	  */
//	@SuppressWarnings("rawtypes")
//	private ScheduledFuture startTask() {
//		return scheduExec.scheduleWithFixedDelay(new Runnable() {
//			@Override
//			public void run() {
//				flag = true;
//				core();
//			}
//		}, timeOut * 1000, timeOut * 1000, TimeUnit.MILLISECONDS);
//	}
//
//	/**
//	  * @author  sunzy
//	  * @date 2016年4月12日 下午2:28:15
//	  * @Description 入库处理
//	  *
//	  * @return  void
//	  */
//	private void core() {
//		if (CollectionUtils.isNotEmpty(dataList)) {
//			// 入库
//			try {
//				@SuppressWarnings("unchecked")
//				List<SolrInputDocument> tmp = (List<SolrInputDocument>)CloneUtils.clone(this.dataList);
//				dataList = new ArrayList<SolrInputDocument>();
//				this.count = 0;
//				this.flag = false;
//
//				logger.info(String.valueOf(tmp.size()));
//				MdrillSolrUtil.addList(tmp);
//				MdrillSolrUtil.commit();
//			} catch (SolrServerException | IOException e) {
//				e.printStackTrace();
//				dataList = new ArrayList<SolrInputDocument>();
//				this.count = 0;
//				this.flag = false;
//			} catch (CloneNotSupportedException e) {
//				e.printStackTrace();
//				dataList = new ArrayList<SolrInputDocument>();
//				this.count = 0;
//				this.flag = false;
//			}
//
//
//			future.cancel(true);
//			future = startTask();
//		}
//
//		this.flag = false;
//	}
//
//	/**
//	  * @author  sunzy
//	  * @date 2016年4月12日 下午2:28:29
//	  * @Description 刷新、更新
//	  *
//	  * @return  void
//	  */
//	private void flash(){
//		this.count++;
//		if (this.count >= MdrillBolt.recordSize) {
//			this.flag = true;
////			System.err.println("recodeSize = " + count);
//			logger.info("recodeSize = " + count);
//		}
//		if (this.flag) {
//			// 核心处理方法
//			this.core();
//		}
//	}
//
//
//	public  String getTableName() {
//		return tableName;
//	}
//
//	public  void setTableName(String tableName) {
//		this.tableName = tableName;
//	}
//
//	public  String getZookeeper() {
//		return zookeeper;
//	}
//
//	public  void setZookeeper(String zookeeper) {
//		this.zookeeper = zookeeper;
//	}
//
//	public  String getColumnNames() {
//		return columnNames;
//	}
//
//	public  void setColumnNames(String columnNames) {
//		this.columnNames = columnNames;
//	}
//
//	public  String getInFields() {
//		return inFields;
//	}
//
//	public  void setInFields(String inFields) {
//		this.inFields = inFields;
//	}
//
//	public  String getPropPath() {
//		return propPath;
//	}
//
//	public  void setPropPath(String propPath) {
//		this.propPath = propPath;
//	}
//
//}
